package main

import (
	"fmt"
	"time"
)

// 定时任务
// Golang的time包为开发者提供了丰富的时间处理功能，其中定时器（Timer）
// 和打点器（Ticker）是实现时间管理的两个核心工具。这一部分将重点介绍如何使用这两种类型来执行定时任务。

// time.Timer用于在未来某一时刻执行单次任务。创建一个Timer最简单的方式是使用time.NewTimer(duration)，
// 其中duration是time.Duration类型， 表示从现在起多久后触发定时器。当定时器到期时，
// 当前时间会被发送到Timer的C，类型为<-chan Time的通道上。

// 为了更灵活地控制定时器，Golang的time包还提供了Reset和Stop方法。timer.Stop()用于停止Timer的执行。
// 如果成功停止了定时器，返回true；如果定时器已经过期或者被停止， 返回false。timer.Reset(duration)方法
// 用于重置定时器，让定时器在指定的时间后再次触发。
func main() {

	// 2006-01-02 15:04:05 go语言诞生的时间
	fmt.Printf("hhh. %v\n", time.Now().Format("2006-01-02 15:04:05"))
	timer := time.NewTimer(2 * time.Second)
	if !timer.Stop() {
		fmt.Println("Timer already expired")
	}
	timer.Reset(1 * time.Second) // 当前时间1秒后触发
	<-timer.C
	fmt.Printf("Timer 2 expired, %v\n", time.Now().Format("2006-01-02 15:04:05"))
}
